// axios的二次封装
import axios from "axios";
import stroe from "../store"; //vuex文件
import {Message,Loading} from "element-ui"; //element-ui的提示组件

import router from '../router/index'
// 1.根据当前开发环境 配置不同的请求服务器
// 配置公共的请求超时时间
// 
// process.env.NODE_ENV---判断当前的开发环境  development  production
// process.env.VUE_APP_BASE_API  自己配置的环境文件的变量 来切换baseURL

let service=axios.create({
  // baseURL:process.env.NODE_ENV=="development"?'/dev-api':"/api",
  baseURL:process.env.VUE_APP_BASE_API,
  timeout:5000,
})

// 2. 配置请求拦截器 
// 请求拦截器 加载loading , 拦截token 将token放到请求头中
let ser=null;
service.interceptors.request.use(config=>{
  // 加载loading
      // ser= Loading.service({
      //     text: '加载中',
      //     spinner: 'el-icon-loading',
      //   })
      if(stroe.getters.token){
        // 前后端验证token的方式 Authorization ：Bearer token
        // 还有其他 如x-token ：token 
        config.headers.Authorization="Bearer "+stroe.getters.token
      }
      return config 
},err=>{
    return   Promise.reject(err)
})

// 3，配置响应拦截器
// 关闭loading ，拦截错误 ，拦截数据中的公共状态 做 公共提示
// 拦截数据中的公共状态  200  403 401  等
service.interceptors.response.use(res=>{
  // 关闭loading  
        // ser.close()
        let {success,message}=res.data;
        if(!success){
          Message.error(message)
        }

        if(res.data.code==50003){ //自己公司设计的一套状态
            Message.error("服务器维护中")
        }
        return res.data
},err=>{
  console.log(err,"-----------错误信息")
    if(err.response.status==401){ //http请求 状态码 401 没有权限
           Message.error("暂未登录，请先登录")
          router.push("/login")
    }
    if(err.response.status==403){ //http请求 状态码 403 禁止访问
           Message.error("没有权限，请联系管理员")
    }
      if(err.response.status==502){ //http请求 状态码 403 禁止访问
           Message.error("服务器，维护中")
      }
    return Promise.reject(err)
})

//方法1  设计一个函数  形参都配置好url,method,data,header
// export default function request(url,method,data,header){
//   return new Promise((resolve,reject)=>{
//         service({
//           url,
//           method,
//           data,
//           header
//       })
//   })
// }
// request("/url","get",{})

export default service  //原始的返回了 axios对象 
